/*
* 为了能收集更多的错误，建议在页面一开始就引入并初始化构造函数
*
* 浏览器错误日志自动收集方案
* 能及时发现偶现性、隐蔽性、不同手机终端兼容性的错误，在修复的时候可作为重要的排查依据。
* { callback } callback 日志回调处理函数, 回调参数：errorMsg, url, lineNumber, columnNumber, errorObj
*/
function Log(callback) {
    
    window.onerror = function(errorMsg, url, lineNumber, columnNumber, errorObj) {
        var errorStack = errorObj ? errorObj.stack : null;
        typeof callback === 'function' && callback(errorMsg, url, lineNumber, columnNumber, errorStack);
    };

    var oldError = console.error;
    console.error = function (errorMsg) {
        typeof callback === 'function' && callback(errorMsg, location.href, 0, 0, { "CustomizeError": "CustomizeError: No error stack" } );
        return oldError.apply(console, arguments);
    };

    window.onunhandledrejection = function(e) {
        var errorMsg = "";
        if (typeof e.reason === "object") {
              errorMsg = JSON.stringify(e.reason);
        } else {
              errorMsg = e.reason;
        }
        typeof callback === 'function' && callback(errorMsg, location.href, 0, 0, { "CustomizeError": "CustomizeError: No error stack" } );
    }

}

module.exports = Log